package service

import (
	"time"

	"gitee.com/chuanjinge/gopkgserv/internal/dao"
	"gitee.com/chuanjinge/gopkgserv/pkg/auth"

	"gorm.io/gorm"
)

// UserService 用户相关业务逻辑
type UserService struct {
	// 可以添加一些依赖的服务或配置
}

// MobileExists 检查手机号是否存在，并返回用户的基本信息
func (s *UserService) LoginByMobile(mobile string) (*dao.UserBase, error) {
	userDao := &dao.UserBase{}
	err := userDao.FindByMobile(mobile)
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil, err
	}

	// 如果用户不存在的话，我们自动注册该用户
	if userDao.ID == 0 {
		userDao.Mobile = mobile
		if err := userDao.CreateNew(); err != nil {
			return nil, err
		}
	}

	// 用户在这里应该必然存在，生成 JWT token
	authToken, err := auth.GenerateToken(userDao.ID, userDao.Mobile, 4*time.Hour) // 4h有效期
	if err != nil {
		return nil, err
	}

	// 此处可以将生成的 authToken 存储到 userDao.AccessToken 中，并更新数据库
	userDao.AccessToken = authToken
	// 假设 TokenCreated 存储的是时间戳，单位为秒
	userDao.TokenCreated = int64(time.Now().Unix())
	if err := dao.DB.Save(userDao).Error; err != nil {
		return nil, err
	}

	return userDao, nil
}
